---
title: "Selectively (il)liberal:"
subtitle: "How nativism & out-group rejection explains support for (il)liberal policy positions"
running-title: "Selectively (il)liberal"
format:
  ctk-article-typst:
    keep-typ: true
    fontsize: 11pt
    title-page: true
    citeproc: true
    blind: false
filters:
  - wordcount
author:
  - name: Alberto López Ortega
    affiliations:
      - name: VU Amsterdam & CES, Harvard University
    email: alopezortega@fas.harvard.edu
    orcid: 0000-0003-2765-7232
  - name: Stuart J. Turnbull-Dugarte
    affiliations:
      - name: University of Southampton
    email: S.Turnbull-Dugarte@soton.ac.uk
    orcid: 0000-0002-9330-3945
date: today
date-format: "D MMMM YYYY"
abstract: |
  Does group-based tribal thinking again out-groups condition support for both liberal and illiberal policies?  Our thesis is that, irrespective of the direction of the policy (progressive or conservative), nativists express selective support for policies based on different signals of group-identity: descriptive markers, group-based substantive representation, in- and out-group norms, and group-based reasonings. We test this theoretical expectations using a novel AI-powered visual conjoint experiment in the Netherlands and Germany that asked individuals to select between hypothetical educational reform proposals presented by civic actors during a public consultation. Empirically, our results demonstrate that citizens, on average, are indeed selectively (il)liberal and that this instrumental policy support is greater among those with higher levels of underlying nativism. Specifically, we show that - among our multidimensional markers of group-based identities, norms, and reasoning - group-based *substantive representation* and *in-group norms* are the strongest determinants of support for diverse reform proposals. These findings have key implications on the maleable nature of citizens' support for the backsliding of liberal democracy tenets.
keywords: [liberal values, nativism, selective attitudes]
#thanks: "The main document consist of a total of {{wordcount}} without references. We are indebted to Troye Sivan."
reference-section-title: References
bibliography: references.bib
---

# Introduction

In January 2024, Elon Musk---tech billionaire, owner of social media platform X, and Trump administration advisor---published a series of posts about sexual abuse cases in the UK, exclusively highlighting crimes committed by Muslim men against women [@pearson2025]. His sudden concern for women's rights stands in stark contrast to his prior record: Musk had previously shown no interest in women's rights issues, accepted a position in the administration of Donald Trump---a man found liable for sexual abuse---and donated \$20 million to groups defending restrictive abortion policies [@thadani2024]. His posts, which amplified anti-Islam activists and demanded remedial political action, focused solely on cases with Muslim perpetrators while remaining silent about similar offences by other groups, including cases where Muslim women were victims.

This instrumental use of liberal values such as women rights to target specific ethnic groups reflects a broader pattern in contemporary Western politics. Nativist politicians frequently claim that immigrants, frequently assumed to be Muslim, carry regressive cultures that threaten western values, suggesting that these immigrants aim to replace and impose what nativists describe as "their way of life" [@rahman2014; @berntzen2019]. While cultural superiority claims have long been used to justify exclusion, they now manifest through claims of civic nationalism [@halikiopoulou2013] and the national appropriation of liberal values by Western countries [@lægaard2007, @halikiopoulou2013, @berntzen2019]. To justify opposition to immigration, far-right actors frame liberal principles like women's rights, LGBTQ+ freedoms, and environmental concerns as inherently Western and incompatible with migrant populations [@farris2012; @spierings2021; @backlund2022; @camargo-fernández2024; @turnbull-dugarte2024]. This strategy enables them to cloak exclusionary policies in a superficial commitment to inclusion [@hunklinger2022].

A critical aspect of this strategy is its selective nature. Over the past two decades, the far-right has employed the defense of liberal principles as a rhetorical tool to oppose immigration, while simultaneously undermining those same values within their own societies [@möser2022]. Evidence of this can be seen in the policies far-right parties have pursued that undermine gender equality, environmental protections, and the rights of gender and sexual minorities across several countries. This erosion is evident in the revoking of reproductive rights and women's bodily autonomy [@möser2022; @deckman2023], the increasing efforts to roll back same-sex parents and transgender rights [@cornejo-valle2022; @velasco2023], and their promotion of hate speech and crimes [@muniesa-tomás2022; @stonewall2023].

<!--
Western politicians have long constructed narratives of cultural difference and superiority over ethnic others. To justify the colonial enterprise in the eighteenth century, European powers depicted the populations they encountered as barbaric, uncivilized, and culturally inferior to Europeans [@said1977; @go2017]. These powers framed their expansion as a noble mission, bringing the supposed inherent progress of their nations to the rest of the world [@seamster2018]. Enlightenment philosophers contributed to this mission by linking civilization and savagery to ethnic distinctiveness and race, suggesting that human differences determined each society's potential for progress and its ability to reach European (read superior) standards of civilization. As the Enlightenment transitioned into the nineteenth century, racial superiority was increasingly justified through emerging sciences like anthropology and biology. Biological theories of race argued for the inferiority of nonwhite races [@kendi2016; @nisbet2017], while cultural models suggested that non-Europeans could be civilized through assimilation, often under colonial rule [@goldberg2000].

This evolving nativist discourse has remained central to both domestic racial hierarchies and imperialist rationalizations. It has provided an indispensable ideological foundation for exclusionary policies, enabling the perpetuation of domestic racism and imperialism under the guise of progress and civilization. Contemporary strategies continue to reinforce a stark dichotomy between the modern, civilized West and a allegedly primitive rest of the world [@mepschen2010]. However, two key differences exist today: first, ethnically motivated and xenophobic narratives are particularly targeted towards restricting immigration and marginalizing ethnic minorities within Western societies [@akkerman2005; @akkerman2015; @meret2013; @delange2015]. 

Nativist politicians claim that immigrants carry regressive cultures that threaten western values, suggesting that these immigrants aim to replace and impose what they describe as "their way of life" [@rahman2014; @berntzen2019]. While cultural superiority rests on the idea of progress, it now manifests through the national appropriation of liberal values by Western countries [@lægaard2007]. To justify opposition to immigration, far-right actors frame liberal principles like women's rights, LGBTQ+ freedoms, and environmental concerns as inherently Western and incompatible with migrant populations [@farris2012; @spierings2021; @backlund2022; @camargo-fernández2024; @turnbull-dugarte2024]. This strategy enables them to cloak exclusionary policies in a superficial commitment to inclusion [@hunklinger2022].

A critical aspect of this strategy is the *selective* nature of these liberal stances. Over the past two decades, the far-right has employed the defence of liberal principles as a rhetorical tool to oppose immigration, while simultaneously undermining those same values within their own societies [@möser2022]. Evidence of this can be seen in the policies far-right parties have pursued that undermine gender equality, environmental protections, and the rights of gender and sexual minorities across several countries. This erosion is evident in the revoking of reproductive rights and women's bodily autonomy [@möser2022; @deckman2023], the increasing efforts to roll back same-sex parents and transgender rights [@cornejo-valle2022; @velasco2023]; and their promotion of hate speech and crimes [@muniesa-tomás2022; @stonewall2023].
-->

While this elite strategy is well-documented, our understanding of whether citizens' liberal attitudes are also selective on nativism is limited. We know that socioculturally liberal attitudes have gained traction across time and generations [@caughey2019; @ogrady2023] and citizens' expressed tolerance toward sexual minorities and their rights has improved as a result of increasingly progressive social norms regarding sexuality [@oyamot2017], while attitudes toward immigration has stagnated if not become more negative [@lancaster2022; @dancygier2017], resulting in a growing constituency of so-called sexually modern nativists [@lancaster2019; @spierings2017; @turnbull-dugarte2024; @Kwon2023]. There is also some evidence that citizens' liberal attitudes are susceptible to identity cues. For example, nativist proposals tend to become more socially palatable when they are presented by women leaders [@ben-shitrit2022; @elad-strenger2024]. Similarly, when illiberal views are associated with an ethnic out-group norm, individuals often react by expressing more liberal stances on these same issues [@turnbull-dugarte2023].

Does this evidence suggest that citizens' liberal attitudes may be *shaped* by ethnic identity cues? If so, what type of identity cues are most influential? And to what extent does far-right rhetoric, rooted in racial strategies, drive these shifts in public opinion?

In this paper, we first analyze the themes often weaponized by ---although not exclusively [@duyvendak2023]---far-right entrepreneurs, to contrast the idea of Western progress with stereotyped migrant populations and justify exclusionary positions. Second, considering the distinct evolution of sociocultural attitudes and drawing from social psychological theories of identity, we theorize that group membership -- specifically signals of out-group membership with Islam -- affects the selective endorsement of (il)liberal attitudes. Finally, we categorize and examine the effects of different ethnic identity-based strategies, emphasizing the role of individual identity cues, social norms, and identity-based narratives in shaping these attitudes.

Empirically, we test these expectations through an original pre-registered visual conjoint experiment conducted in the Netherlands and Germany, two contrasting cases regarding the nationalization of liberal norms, with the Netherlands being an early adopter [@delange2015] and Germany a more recent one [@Ahrens2022]. In these experiments we asked respondents to select between fictional educational reforms proposals presented by civic actors during a public consultation. Our cross-national experimental design simultaneously manipulated multiple features of the proposed reform as well as the policy entrepreneurs associated with these proposals, allowing us to disentangle the persuasiveness of a diverse array of identity cues on respondents' support for (il)liberal education reforms. Our results indicate that citizens, on average, are selectively (il)liberal, and that instrumental policy support is greater among nativists. Specifically, we show that---among our multidimensional markers of group-based identities, norms, and reasoning---group-based substantive representation and in-group norms are the strongest determinants of policy support.

Our study makes several key contributions. First, it advances the literature on conditionality of attitudes by demonstrating how multidimensional group identity cues play a pivotal role in shaping policy preferences on sociocultural issues, particularly in states where nativism is widepsread. Empirically, we unpack ethnic identity cues, not only across the themes used to legitimize nativism but also in terms of the specific schemes that signal diverse group-based information. Second, it highlights the vulnerability of citizens' liberal values to illiberal strategies, showing that citizens are highly susceptible to the group-dynamics. This susceptibility underscores the fragility of public commitment to liberal values such as gender equality, LGBTQ+ rights, and environmentalism. Third, in times when the politicization of classroom content has seen a resurgence in several democracies [@kuhar2017], our findings contribute to ongoing debates about progressive and conservative proposals concerning educational content in schools.

Overall, our study provides novel demand-side evidence of an instrumental adherence to ideas of progress that echoes past elite strategies. Just as in the eighteenth century, when the rhetoric of progress was selectively invoked to justify colonial practices [@said1977; @go2017], our findings suggest that the rise in anti-immigration rhetoric, attitudes, and voting behavior today rests on a fragile commitment to values such as gender equality, LGBTQ+ rights, and environmentalism.

# Liberal values as strategic tool for exclusion

To understand the main themes exploited to perpetuate the artificial dichotomy that portrays the west as inherently liberal and democratic, while positioning out-groups as threats to these values [@griffin2000; @moffitt2017], women's rights and LGBTQ+ inclusion have emerged as key areas.

The weaponization of women's rights and gender equality more broadly, often penned *femonationalism*, involves co-opting feminism to oppose Islam and other non-Western cultures. Far-right groups present themselves as defenders of women's rights, or speaking in the name of women, arguing that ethnic out-groups, with their stereotyped inherent misogyny, are in need of intervention by Western forces [@farris2012], incompatible with western values of gender equality, and therefore, inimical to the persistence of "western values" and the security of women [@farris2018]. While Farris developed the concept in the context of the Netherlands, France, and Italy, it has been used to characterize the behavior of far-right parties in other politically diverse Western contexts such as Switzerland [@bader2020], Britain [@calderaro2023], Spain [@camargo-fernández2024] and the US [@bader2023]. While the essence of racial stereotyping remains in place, femonationalist strategies adapt to the context. In the US and Switzerland, otherwise anti-feminist politicians used debates around female circumcision to present themselves as defenders of women's rights while building a narrative of threat to the Swiss and American nation [@bader2020; @bader2023]. Similarly, the use of women as leaders has been found to be used to make nativist arguments more palatable and convincing, often using "feminist" identity as a credential [@oost2023, @Blee2021]. In Figure 1 (Panel B), we illustrate an example of femonationalism in Spain through a social media post by Rocío de Meer, a senior parliamentarian from the far-right party VOX. Her tweet features a VOX campaign poster stating, "You're in Spain. Here, men and women have the same rights," written in Spanish and Arabic. This messaging exemplifies a femonationalist strategy that portrays Western (Spanish) gender equality as incompatible with non-Western, particularly Muslim, cultures. The narrative is amplified by the descriptive identiy of the sender: a woman politician posting the tweet and featuring another woman putting up the poster. This frames ethnic out-groups as threats to women's rights, using feminism selectively to justify exclusionary, anti-immigration policies. The strategic utility of gender equality is blatantly instrumental in this case given that VOX's own policy positions are often detrimental to the advancement of gender equality [@Calvo2023, @Rama2021].

Similarly to femonationalism, *homonationalism* involves rhetorically leveraging the protection of LGBTQ+ rights to normalise nativist attitudes and justify exclusionary policies. Actors argue that protecting LGBTQ+ rights necessitates stringent immigration controls to prevent the influx of individuals from cultures perceived as homophobic [@puar2018]. While originally identified in the context of Israel [@gross2014; @puar2018; @puar2013], homonationalist rhetoric has extended throughout radical right forces in Europe [@akkerman2005; @hunklinger2022], the UK [@foster2022] and US [@murib2018]; who present immigrant populations as violent threats to the security of non-heterosexual populations [@turnbull-dugarte2023]. Consider the social media post from Julien Odoul, an openly gay MP for France's far-right party, Rassemblement National (RN), in Figure 1 (Panel A) as as another illustrative example. Odoul suggests in his post that the solution to combating homophobia is to "avoid importing homophobes and cultures that consider homosexuality an illness or a crime." By juxtaposing LGBTQ+ rights with immigration, Odoul frames ethnic out-groups as inherently homophobic, suggesting that immigration can only exist in contradiction to protection of in-group liberal (in this case LGBTQ tolerant) norms. He concludes his tweet by linking immigration to recent homophobic attacks in France, reinforcing the stigmatization of ethnic out-groups as threats to national security and LGBTQ+ populations. This narrative exemplifies the way far-right politicians weaponize LGBTQ+ rights as a means to criminalize immigrants and justify restrictive immigration policies under the guise of protecting vulnerable groups. Odoul's identity as an openly gay politician reinforces this strategy, giving it an air of legitimacy and enabling him to embody the narrative he promotes. This embodiment serves to make the rhetoric more palatable to far-right audiences by presenting it as a defense of LGBTQ+ communities rather than outright bigotry. As in the case of VOX *faux* defence of gender equality, this rallying call to protect French LGBTQ+ citizens is not without hypocrisy given RN's explicit opposition to established LGBTQ+ rights in France [@Geva2024].

While *femonationalism* and *homonationalism* are the most well-documented examples of selective liberalism, they are, however just two concrete examples of how illiberal actors can co-opt liberal norms for their strategic utility. Indeed, a key element of selectively liberal strategies is their adaptability, allowing new issues to be instrumentalized in order to maintain and reinforce this division between the West and its perceived "others." For instance, *environmental nationalism* merges ecological and animal welfare concerns with nationalist rhetoric to argue against immigration. Politicians who follow this strategy frame animal rights and environmentalism within a nationalist context, suggesting that immigrants' behavior and traditions undermine the nation's environment and animal welfare standards [@lubarda2023; @backlund2022]. An example of this is found in the tweet shown in Figure 1 (Panel C), where Geert Wilders, leader of the Dutch far-right Party for Freedom (PVV), equates the Islamic Festival of Sacrifice with "barbarism" and states it "really does not belong in the Netherlands." This is a striking example of *environmental nativism*, where the cultural practices of immigrant communities are portrayed as incompatible with the nation's values and standards. Other recent examples include judeonationalism [@oosten2024], which uses anti-Semitic rhetoric to promote anti-Islam or anti-immigration policies, and housing nationalism, which co-opts the fight for locals' housing rights to create resentment against foreigners [@lauster2024].

While, as described above, this evolving rhetoric is most prominent on the far-right, centrist and progressive politicians have adopted a lighter version of this narrative [@hurenkamp2012; @tinsley2022; @duyvendak2023]. Even when framed within pro-immigration platforms or with the intent of countering far-right nativism, they have reproduced narratives suggesting that "open" national values are under threat of "Arabization" arguing that immigrants---often perceived as inherently conservative---should or can adapt to these values [@duyvendak2023, 201].

These various manifestations of selective liberalism---whether focused on gender equality, LGBTQ+ rights, environmental protection, anti-Semitism, or housing access---share a common instrumental logic: they appropriate progressive values to draw boundaries between a purportedly enlightened in-group and a supposedly backward out-group. While the specific content of the progressive value being weaponized may vary, the underlying strategy remains consistent: position the in-group as the guardian of modern, liberal ideals while casting the out-group as an inherent threat to these values.

However, the evidence presented thus far focuses exclusively on elite-level discourse and strategy. While this supply-side analysis illuminates how political actors *deploy* selective liberalism, it leaves open the crucial question of whether these strategies actually *influence* citizen attitudes and policy preferences. Do these identity-based appeals succeed in shaping how citizens evaluate liberal policies when applied to different social groups? To address this question, we move beyond analyzing elite rhetoric to examine whether and how selective thinking manifests in mass opinion. Specifically, we investigate whether citizens' support for liberal policies varies systematically based on the target group, and explore how various mechanisms of ethnic identity---beyond pure rhetorical appeals---condition these attitudes. The following section develops our theoretical framework for understanding why citizens might engage in selective liberal thinking and identifies the broader set of identity-based tools that shape these dynamics.

![Tweets illustrating modern nativists' usage of identity cues. Panel A presents a tweet by Vox MP Rocío de Meer that reads as "You are in Spain. Here men and women have the same rights. Panel B presents a tweet by RN European Parliament candidate Julien Odoul that reads as"To fight against homophobia, it is needed to start from evitating the importion of homophobes and cultures that consider homosexuality an illness or a crime. The rise of homophobic acts is connected with the rise in migration fluxes". Panel C presents a tweet by PVV leader Geer Wilders that reads as "Today is the Islamic Festival of Sacrifice. Disgusting. Pure horror. What barbarism. This really does not belong in the Netherlands. Ban the #FestivalofSacrifice!". Panel D presents a tweet by Reform UK.](images/tweets_selection.png){width="80%"}

# Ethnic identity cues of value differentiation

Our study proposes an integrative model that categorizes three types of group identity markers that influence citizens' preferences and can sway them into selectively supporting liberal causes: individual descripyive characteristocs, group associations, group-based reasonings, and group-based norm perceptions. In the following, we provide theoretical grounding on why each of three identity-usages is set to make an impact citizens' preferences.

***Descriptive and substantive representation***

Building on theories of political representation and motivated reasoning, we argue that both descriptive and substantive ethnic markers serve as powerful cues that shape how citizens evaluate policies---even those not explicitly related to ethnicity [@pitkin1967; @mansbridge1999]. Just as political actors strategically deploy liberal values to construct boundaries between in-groups and out-groups, citizens rely on identity signals to determine their support for various policies.

Descriptive representation---visible characteristics that signal group membership---operates through automatic categorization processes that trigger immediate in-group/out-group distinctions [@mcdermott1997]. These visible markers activate what social identity theorists term "social categorization," where individuals rapidly sort others into in-group or out-group categories [@tajfel1979]. This categorization process mirrors the powerful tribal thinking documented in studies of partisan identity [@AchenBOOK; @huddy1998], where group attachments can shape information processing and even lead to tolerance of even democratic norm violations [@graham2020]. When policy entrepreneurs share visible ethnic characteristics with citizens, their proposals are likely to be viewed more favorably due to assumed value alignment and increased trust [@theiss-morse2009]. A wide body of literature presents evidence that descriptive similarity maximises persuasion effects whereas descriptive distinctiveness can limit persuasion or even reverse it[^1].

[^1]: See @broockman2024 for an empirical robust challenge

However, descriptive characteristics alone may provide incomplete or even misleading information about a policy entrepreneur's substantive positions [@harrison2017]. Recent research on far-right movements demonstrates that descriptive representatives (e.g., women or immigrant-origin leaders) can effectively legitimize illiberal platforms without explicitly advocating for traditionally associated in-group interests [@ben-shitrit2022; @wardt2024]. Similarly, LGBTQ+ candidates in nationalist movements illustrate how identities can be strategically deployed to validate positions that may not align with typical in-group expectations [@magni2023].

Substantive representation---signaled through cultural, religious, or organizational affiliations---provides additional identity cues that can either reinforce or complicate these initial categorizations [@dovi2002]. Individuals often make inferences about the substantive political positions of others based on distinct socio-demographic characteristics [@jones2019, @Sen2017]. The presence of information related to one's substantive political preferences may be at odds with these assumptions. As such, these affiliations serve as additional information proxies for broader value systems and trigger what psychologists call "categorical thinking," where individuals make sweeping inferences about an actor's positions across multiple policy domains [@brewer2003]. The potential misalignment between descriptive and substantive representation creates interesting dynamics: while Muslims might be stereotyped as holding certain positions [@VanOosten_Stereotypes, @turnbull-dugarte2024], individual Muslim advocates may explicitly support contrasting policies, creating tension between different identity signals.

The interaction between descriptive and substantive ethnic markers thus creates a complex framework for understanding how citizens evaluate policies. While descriptive representation operates through immediate visual recognition triggering group-based motivated reasoning [@huber2024], substantive markers can either reinforce, challenge or add one more layer to these initial categorizations. This becomes especially relevant in contexts where liberal values are selectively wielded as markers of group distinction---as seen in cases of femonationalism and homonationalism. The framework suggests that citizens, like political elites, may engage in selective evaluation of policies based on the ethnic identity of their promoters, both through descriptive and substantive lenses.

This leads us to hypothesize that (*H1*) *citizens will be more (less) favourable towards policies promoted by the ethnic (out-) in-group, both when ethnic identity is signalled descriptively (H1.a) substantively (H1.b)*

***Group reasonings***

Our second dimension focuses on how group-based reasoning---the explicit framing of policies through ethnic group narratives and interests---shapes policy preferences. While descriptive and substantive representation operate through identity cues, group reasoning works through more explicit cognitive pathways, where policy entrepreneurs actively frame issues using nativist narratives that position certain values and norms as inherent to national or ethnic identity [@mcclain2009].

Group reasoning influences policy preferences through three key psychological mechanisms that explain why nativist frames increase policy support. First, it activates what social psychologists term "group consciousness"---awareness of shared group interests and experiences that shapes how individuals process policy-relevant information [@miller1981]. When policy entrepreneurs frame issues through nativist narratives (e.g., "this policy reflects our community's values" or "this protects our way of life"), they trigger collective identity considerations that can override policy-specific evaluations [@simon2008]. This effect is particularly potent when group boundaries are perceived as clearly defined and politically salient [@huddy2001], transforming abstract policy issues into immediate matters of group identity and value preservation.

Second, group reasoning engages identity-protective cognition [@kahan2017]. This psychological mechanism leads individuals to process information in ways that defend their group's status, values, and worldview. When policies are presented through nativist frames that position them as either advancing or protecting group interests, individuals evaluate them not on their specific merits but on their perceived implications for group status and identity maintenance [@kahan2007]. This protective cognition explains why citizens might selectively support liberal policies when they are framed as expressions of national values while opposing similar policies when perceived as advancing out-group interests [@schneider1993].

Third, group reasoning leverages collective memory and shared historical narratives. Policy entrepreneurs can frame current policy debates within broader narratives of national experience and value systems, making seemingly neutral policies resonate with deeper identity-based concerns. For instance, educational policies may be evaluated through the lens of protecting "our values" or "our way of life" rather than their immediate practical implications [@liu2005]. This framing activates what social identity theorists identify as individuals' fundamental need for positive group distinctiveness [@tajfel1979; @huddy2013].

Crucially, these reasoning mechanisms can operate independently of policy content. Just as political actors strategically deploy liberal values to draw boundaries between groups---as seen in phenomena like homo-, femo-, and environmental nationalism---citizens may evaluate policies based on how they are framed in relation to group interests and national values. When policies are presented through nativist frames, they trigger identity-protective cognition, activate group consciousness, and transform policy preferences into expressions of group identity and value preservation [@duyvendak2023].

This theoretical framework explains why citizens engage in selective liberalism at the mass level. When policy entrepreneurs frame liberal policies through nativist narratives that position them as expressions or protections of national values, citizens evaluate them through group-based psychological mechanisms rather than their liberal content alone. This creates a cognitive foundation for increased policy support when nativist reasonings are employed, mirroring the selective application of liberal values observed in elite discourse around femonationalism and homonationalism.

Building on this, we hypothesize that (*H1*) *citizens will be more favorable towards policies when they are associated to nativist reasonings.*

***Group norm perceptions***

Group norm perceptions---beliefs about what behaviors and attitudes are typical or acceptable within one's group versus others---fundamentally shape how individuals evaluate and support policies [@cialdini2004]. These perceptions operate through powerful social influence mechanisms that can either facilitate or inhibit policy support based on perceived group consensus patterns [@deutsch1955]. The influence of these perceptions is particularly relevant in contemporary political contexts where liberal values are often positioned as markers of group distinction and cultural identity.

The psychological impact of group norms on policy preferences operates through multiple interconnected pathways. When individuals perceive a policy position as normative within their group, they face both cognitive and social pressure to align with this consensus [@spears2021]. This alignment stems from basic psychological needs for group belonging and positive distinctiveness---needs that shape not just explicit attitudes but also unconscious information processing and decision-making. Conversely, when policies are associated with out-group norms, individuals often distance themselves from these positions to maintain clear group boundaries [@terry2000; @brewer2001]. This distancing effect can occur even when the policies might otherwise align with individual preferences, highlighting the powerful role of group norm perceptions in shaping policy support.

Research in political behavior demonstrates that norm perceptions shape policy preferences through robust social proof mechanisms [@schultz2007]. These mechanisms help individuals navigate complex policy choices by referring to apparent group consensus, particularly in situations of uncertainty or when issues are multifaceted. Political actors can strategically deploy information about group support or opposition to make certain positions appear more or less normative [@prentice2018]. For instance, studies show that presenting environmental behaviors as common within one's national group significantly increases support for environmental policies [@vlasceanu2024], while framing them as characteristic of out-groups can trigger resistance.

The influence of group norms becomes especially pronounced in contexts of perceived intergroup competition or cultural distinctiveness [@brewer2001]. When policy positions are presented as markers of group differentiation---whether through explicit comparative information or implicit contrasts---their impact on individual preferences intensifies. This dynamic has been documented across various policy domains, from environmental behaviors to expressions of tolerance [@oyamot2017] and prejudice [@álvarez-benjumea2023]. The effect is particularly strong when policies touch on values or practices that are seen as culturally distinctive or identity-defining.

Moreover, norm perceptions interact dynamically with broader societal contexts and political discourse. When political actors frame certain positions as reflecting broader societal consensus or dissensus, they activate both identity-protective motivations and desires for social approval. These motivations can lead individuals to support policies they perceive as normative within their group while rejecting similar policies when they are associated with out-group standards [@newth2023]. This pattern helps explain why public opinion on various issues---from gender equality to environmental protection---often shows marked differences between groups, even when controlling for individual-level factors.

The power of norm perceptions extends beyond simple conformity effects. Research shows that individuals actively use information about group norms to construct and maintain social identities [@tankard2016; @heider1958; @turnbull-dugarte2023]. When policies are framed in terms of group norm adherence or deviation, they become tools for identity expression and maintenance. This process can lead to what appears as inconsistent policy preferences---supporting liberal policies when they are perceived as in-group norms while opposing similar policies when they are associated with out-group standards.

Political entrepreneurs often leverage these dynamics by strategically presenting information about group consensus and disagreement. By highlighting patterns of support or opposition among different groups, they can effectively shape policy preferences through norm-based influence. This influence is particularly effective when it emphasizes clear contrasts between in-group and out-group positions, as such contrasts activate both identity-protective motivations and desires for positive group distinction.

This theoretical framework suggests that the relationship between norm perceptions and policy preferences is inherently comparative and context-dependent. Individuals evaluate policies not just based on absolute levels of group support, but through an understanding of how these positions differentiate their group from others. This comparative dimension helps explain why citizens might selectively support or oppose policies based on their perceived association with in-group versus out-group norms, even when the policies themselves remain constant. The framework also highlights how norm perceptions can serve as powerful tools for political mobilization, particularly when deployed in ways that emphasize group distinctiveness and identity maintenance.

This leads us to hypothesize that (*H3*) *citizens will be more (less) favorable towards policies when the support for that policy is the in-group (out-group) norm*

Of course, there are reasons to assume that the efficacy of in-group and out-group norms should be asymmetric among citizens. The theoretical propositions of femonationalism, homonationalism, and environmental nationalism rely on a similar assumption: that the strategic support for liberal policies benefiting women, LGBTQ+ individuals, and the environment is driven by nativists complying with a nationalized in-group norm while disidentifying from ethnic out-groups. Consequently, one would expect the preferences of non-nativists---those not negatively predisposed to immigration and ethnic out-groups---to be more stable and resilient against the selective updating anticipated among nativists.

This assumption aligns with the expectations of balance theory [@heider1958]: if individuals are expected to update their preferences for certain policies selectively to enhance their social distinctiveness from an undesirable out-group, a precondition for this behavior is the existence of that undesirability. Essentially, the rejection of out-group identity markers is likely to be greater among those who are negatively predisposed to the out-group. It is important to note, however, that this hypothesized asymmetry applies only to out-group markers; selective preferences signalling compliance with in-group norms should not be conditioned by respondents' nativism.

*(H4) Nativists will be less favorable toward policies associated with out-group ethnic cues.*

# Empirical strategy

To test our theoretical expectations, we utilize an original visual conjoint experiment embedded in a survey conducted in the Netherlands and Germany administered by Kieskompas. Quota-based recruitment rendered a sample that reflects the gender, age, and educational distribution of the Dutch and German electorate[^2]. The original data collection took place over two rounds. We fielded our survey in the Netherlands in August 2022 (N=1169) and subsequently fielded in Germany in April 2023 (N=1358). Our visual conjoint design (detailed below) produced a resulting sample 25,270 observations based on an individual comparing two randomly assigned proposal profiles via five different tasks (2527\**2\**5). The experiment was pre-registered, and any deviations from the original plan are explained in Appendix B.[^3]

[^2]: Analysis reported throughout applies post-stratification weights compiled and provided by Kieskompas.

[^3]: Ethical approval for the original data collection and experimental manipulations presented in this study was provided by the Faculty of Social Science Ethical Review Board at the University of \[BLINDED\]. Approval \# \[BLINDED\] <!--:ERGO93762.-->

***Case selection***

Our empirical test relies on original data sourced from the Netherlands and Germany. The usefulness of these cases for our empirical assessment is based on several factors. First, the countries are, on several institutional variables, comparable. They are two neighboring western European countries with a similar religious heritage and both have multiparty systems. Importantly, both countries currently host electorally successful and influential radical right-wing parties: Germany's *Alternative für Deutschland* (AfD) and the Netherland's multiple radical right-wing parties, namely *Partij voor de Vrijheid* (PVV), Forum voor Democratie (FVD), and *Juiste Antwoord 2021* (JA21). Secondly, the politics of immigration and ethnocultural diversity is salient in both cases. As both cause [@arzheimer2018] and consequence of radical right-wing party success [@abou-chadi2020; @krause2023], political debate of migration has become a staple in mainstream political discourse. Thirdly, and of core interest for our assessment of selectice (il)liberalism, both the Netherlands and Germany have long played host to femonationalist and homonationalist political rhetoric. An illustrative examples of this is how Netherlands pioneered political homonationalism with the first-ever far right openly gay politician, Pim Fortuyn, used his identity to draw a line with Muslim immigrants in the early 2000s [@boehmer2012]. Nativist identity instrumentalizations took some time to reach Germany, but are wide since 2017 when the AfD focused their campaign both on femonationalism and homonationalism [@doerr2021], the same year in which they selected an openly lesbian politician as leader of the party in the Bundestag. As such, selecting these cases allows to analyse the expectations of selective liberalism in two political contexts where respondents are actually likely to encounter the femonationalist, homonationalist and environmental nationalist trade-off.

***Conjoint design: dependent variable***

The conjoint scenario we presented to respondents was political but one strategically devoid of partisanship. Respondents were told that policy-makers in their respective countries were considering reforms to the national curriculum in schools and that, in preparation of any formal proposals, they had opened a public consultation in which different civic actors were invited to advocate for alternative additions related to the potential reform. These public responses from civic actors could propose specific additions to the curriculum or indeed lobby *against* the addition of certain components. Our outcome of interest is expressed support for individual proposals that randomize different features of the proposal's substantive focus as well as additional information around the proponents themselves and other signals of in-group and out-group support.

Our targeted focus on education policy reforms is based on both its external validity as a relevant area to test our thesis as well as its methodological advantages. First, education in schools is a policy domain where "identity politics" debates frequently take place, as demonstrated across several countries including Hungary [@rankin2021], the Netherlands [@middleton2023], Spain [@payo2023], or the US [@goldstein2022; @phillips2022], and indeed wider transnational efforts [@AyoubBOOK]. As @kuhar2017 explain, anti-gender entrepreneurs think liberal sexual education poses a threat towards conservative values such as "traditional family" and "natural masculinity and femininity". This has converted school education a battlefield where liberal policy proposals that promote diversity and equality coexist with backlash proposals that promote reinstating traditional values. Second, and from a methodological standpoint, relying on curriculum-based educational reforms is strategic and provides us with an empty vessel within which we can manipulate substance while keeping the policy setting constant. Comparing policy proposals in distinct policy arenas altogether would reduce comparability given the multidimensional nature of determinants of support for diverging policies like, for example, pro-environmental policies [@DEVINE_GREEN], welfare reform [@rinconJEPP], or abortion rights [@Doherty_ABORTION].

Empirically, we adopt a conjoint design that allows us to demonstrate that selective identity-based support for policies can result in both selective liberalism *and* illiberalism. As such, our conjoint tasks include proposals that are in favour and against a diverse catalogue of substantive issues for consideration in educational proposals. We summarize these diverse issues in @tbl-reforms1. For our purposes, we categorise proposals parsimoniously as progressive or conservative; note, however, that the civic actors' position could be favourable (e.g., advancing education on toxic masculinity) or unfavourable (e.g, opposing education on toxic masculinity) within each of these areas.

| Policy type  | Education to promote:                         |
|:-------------|:----------------------------------------------|
| Progressive  | LGBTQ+ inclusion                              |
| Progressive  | Issues related to gender identity & diversity |
| Progressive  | Anti-toxic masculinity                        |
| Progressive  | Environmental adaptation                      |
| Conservative | Christian values                              |
| Conservative | Sacrifice & hard work                         |

: Education policy reforms {#tbl-reforms1 .striped .hover}

***Conjoint design: independent variables***

First, to test *H1* on individuals descriptive characteristics, we rely on AI-generated faces that signalled information concerning the ethnicity (descriptive identity marker), age, and gender of the policy proponent. The two latter, as well as LGBTQ+ status which is also conveyed visually (flag emoji), are used as controls in the experiment.

We included visual cues within our set of simultaneously manipulated conjoint attributes efforts to maximise external validity, in step with recent developments in conjoint applications. While political scientists have used pictures to convey one experimental attribute visually [@abrajano2005], it is only recently that visual multidimensional conjoint experiments have started to be implemented [@lópezortega2023; @lópezortega2024; @Vecchiato_Munger_2024]. Importantly, and beyond issues of external validity, leveraging visual manipulations have the added benefits of reducing the potential for social desirability bias.[^4] In our experiment, we combined visual information with text-based information. Visual information was conveyed through AI-generated faces that allowed us to select from a large pool of comparable faces and alter specific attributes of these faces.

[^4]: For a discussion, see @lopez2024visual. @lopez2024visual compares text-based and image-based conjoint manipulations to demonstrate, among other features, that the widely observed gender premium experienced by female candidates in text-based conjoints [@schwarz2020] is not observed in image-based manipulations.

However, we do not restrict our test to descriptive identities, but also look at the effect of a more substantive version of individuals identity. More concretely, we differentiate associations that cue ethnic in- our out-group membership. Substantive identity markers were signalled through fictitious names of associations that clearly cue whether these organizations are Muslim or not.

Second, and to test *H2* on group reasonings, we rely on ethnic framings of the policy being proposed. These reasonings vary in the extent to which they are nativist or not, but also the type of nativism. Following previous research differentiating between hostile, and benevolent, forms of nativism [@brubaker2004; @greenfeld1992], we distinguish reasonings that essentialise in-group identity and liberalism alluding to the need for a certain policy to "protect domestic freedoms and Western lifestyles", from policies that target the out-group (by for example alluding to the need to "counter backward Islamic intolerance") [@duyvendak2023].

Lastly, to test *H3,* on in- and out-group norms we manipulate national and international public endorsements or rejections for the proposal. For in-grop norms, we follow previous research on threshold models [@andreoni2021]. These models suggest that the likelihood of an individual diverging from a social norm increases as more people in society have already done so. When the number of individuals who deviate reaches a critical 'tipping point,' it creates a situation where even those who are typically risk-averse, conformist, or hold pessimistic views about change are encouraged to join in the deviation [@granovetter1978; @efferson2020]. In line with research on norm manipulation [@Bicchieri2017; @Masser2003], we manipulate ethnic in- and out-groups norms by revealing the extent to which each group is in favour or against a given policy, thus ruling out incorrect beliefs about others' preferences as a reason for detrimental norm persistence [@smerdon2020].

To test our *H4* on the moderating effect of nativism, we utilize an index of anti-immigration attitudes derived from the European Social Survey (ESS) items related to immigration. This index combines responses to questions assessing perceptions of immigration in terms of its cultural, economic, and social implications, including aspects such as preferences for living in a diverse society and attitudes toward the integration of immigrants. The moderating variable, which reflects pre-treatment attitudes toward immigration, categorizes respondents based on their scores relative to the mean. Specifically, individuals will be classified into dichotomous indicators: those with below-mean attitudes will be considered less favorable toward immigration, while those above the mean will be viewed as more supportive.

To make the experiment as realistic as possible we programmed the conjoint so no individual profile pictures, group name, country, reasonings, nor proposals could appear more than once across the five rounds. For example, were a reform proposed by the "German Muslim Association" in the first forced comparison, the respondent would not be exposed to another proposal from the same organisation if, however, they may be exposed to a proposal from another equivalent Muslim-based organisation. In real terms, this means that presented profile attributes were randomly sampled from a much larger universe of attribute values that could be harvested to generate the randomly compiled proposals. The rest of the information comes in text.

@tbl-attributes1 displays the attributes included in the conjoint tasks, and Figure 1 shows an example of a conjoint task with two random proposals that respondents had to choose from (the appendix contains a more detailed explanation of each attribute).

| Attribute | Identity marker | Levels | Manipulation |
|:-----------------|:-----------------|:------------------|:-----------------|
| Ethnicity | Descriptive | White and non-white | Visual face cues |
| Group name | Substantive | Muslim vs. Non-Muslim | Text cues |
| National support | In-group norm | 80%, 60%, 40%, 20% | Text cues |
| International rejection | Out-group norm | Arab countries and non-Arab (countries) | Text cues |
| Reasoning | Group reasoning | Non-nativist, soft nativist, hard nativist | Text cues |
| Age | Descriptive | Young and old | Visual face cues |
| Gender | Descriptive | Man and woman | Visual face cues |
| LGBTQ+ status | Descriptive | LGBTQ+, trans, no signal | Emoji cues |

: The conjoint attributes {#tbl-attributes1 .striped .hover}

![Visual conjoint example in the German survey](images/cj_example_2024.png){width="50%"}

# Results

```{r plot 1, echo=FALSE, fig.height=6, fig.width=7, echo= FALSE, message=FALSE, warning=FALSE, fig.cap = "Marginal means for the general model"}


#### 0. pre-processing ####

load("data/conjoint_choice.Rdata")
load("data/conjoint_rating.Rdata")

load("de_data.Rdata")
load("nl_data.Rdata")
library(tidyverse)
library(cregg)
library(PrettyCols)
library(extrafont)
library(patchwork)
library(FindIt)
library(ggdist)
library(gtsummary)
library(tidycomm)

intercept <- tibble(
  type = factor(c("Marginal means", "Differences in marginal means")),
  value = c(0.5, 0)
) 

loadfonts()

my_theme <- theme_minimal(base_size = 12) +
  theme(
    strip.placement = 'outside',
    strip.background = element_rect(color=NA, fill=NA),
    panel.spacing = unit(0,'pt'),
    panel.background = element_rect(color='black')
  )

nl_data1 <- nl_data |> drop_na(weight) |> 
  mutate(Gender= case_when(respondent_gender==1 ~ "Man",
                           respondent_gender==2 ~ "Woman"
  ),
  Education= case_when(respondent_edu== 1 ~ "Primary studies",
                       respondent_edu== 2 ~ "Secondary studies",
                       respondent_edu== 3 ~ "Tertiary studies"
  ),
  Leftright= respondent_leri, Sexuality=respondent_sexuality,
  Birthyear= respondent_age, country="Netherlands") |> 
  select(Gender, Sexuality, Education, Leftright, Birthyear, weight, country)


de_data1 <- de_data |> drop_na(weight) |> 
  mutate(respondent_gender=  haven::as_factor(respondent_gender),
         respondent_gender= as.numeric(respondent_gender),
         Gender= case_when(respondent_gender==1 ~ "Man",
                           respondent_gender==2 ~ "Woman"
  ),
  Education= case_when(respondent_edu== 1 ~ "Primary studies",
                       respondent_edu== 2 ~ "Secondary studies",
                       respondent_edu== 3 ~ "Tertiary studies"
  ),
  Leftright= respondent_leri, Sexuality=respondent_sexuality,
  Birthyear= respondent_age, country="Germany") |> 
  select(Gender, Sexuality, Education, Leftright, Birthyear, weight, country)



nlde_data <- full_join(nl_data1, de_data1) |> 
  mutate(Age= cut_number(2022 - Birthyear, 4))

cj_1 <- choice ~  age + gender + LGBT + ethnicity + proposal_grouped1 + reasoning_grouped + group + national_support + international_rejection 

cj_2 <- choice ~  age + gender + LGBT + ethnicity +reasoning_grouped + muslim + national_support + international_rejection2  

mm_c2 <- cj(conjoint_choice, cj_1, id = ~ResponseId,  estimate = "mm", weights = ~ weight) %>% 
  mutate(BY= "Whole sample",
         feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "group"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

mm_s2 <- cj(conjoint_choice, cj_1, id = ~ResponseId,  estimate = "mm", by= ~country, weights = ~ weight) %>% 
  mutate(feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "group"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

mm_gen2 <- full_join(mm_c2, mm_s2) |> mutate(BY= factor(BY, levels= c("Whole sample", "The Netherlands", "Germany"))) 



#### 1. general ####

mm_c <- cj(conjoint_choice, cj_2, id = ~ResponseId,  estimate = "mm", weights = ~ weight) %>% 
  mutate(BY= "Whole sample",
         feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection2"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "muslim"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

mm_s <- cj(conjoint_choice, cj_2, id = ~ResponseId,  estimate = "mm", by= ~country, weights = ~ weight) %>% 
  mutate(feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection2"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "muslim"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

mm_gen <- full_join(mm_c, mm_s) |> mutate(BY= factor(BY, levels= c("Whole sample", "The Netherlands", "Germany")))


mm_gen_graph <- mm_gen %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error
  ) |> 
  filter(!feature %in% c("Age", "Gender", "LGBT", "Proposal:")) |> 
  ggplot(aes(level, fill= BY, color=BY, shape=BY)) +
  geom_hline(yintercept = 0.5, color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~., scales='free', space='free', switch = 'y') +
  coord_flip() +
  theme(legend.title = element_blank()) +
  theme(strip.text = element_blank()) +
  labs(x=NULL, y='Marginal means') +
  my_theme +
  theme(
    strip.placement = 'outside',
    strip.background = element_rect(color=NA, fill=NA),
    panel.spacing = unit(0,'pt'),
    panel.background = element_rect(color='black'),
    legend.position = "top"
    
  )  +
  scale_fill_manual(values = c("purple", "#ADD8E6", "#ffc6c4")) +
  scale_color_manual(values = c("purple", "#ADD8E6", "#ffc6c4")) 




amce_c <- cj(conjoint_choice, cj_2, id = ~ResponseId,  estimate = "amce", weights = ~ weight) %>% 
  mutate(BY= "Whole sample",
         feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection2"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "muslim"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

amce_s <- cj(conjoint_choice, cj_2, id = ~ResponseId,  estimate = "amce", by= ~country, weights = ~ weight) %>% 
  mutate(feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection2"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "muslim"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

amce_gen <- full_join(amce_c, amce_s) |> mutate(BY= factor(BY, levels= c("Whole sample", "The Netherlands", "Germany")))


amce_gen_graph <- amce_gen %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error
  ) |> 
  filter(!feature %in% c("Age", "Gender", "LGBT", "Proposal:")) |> 
  ggplot(aes(level, fill= BY, color=BY, shape=BY)) +
  geom_hline(yintercept = 0.0, color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~., scales='free', space='free', switch = 'y') +
  coord_flip() +
  
  theme(legend.title = element_blank()) +
  theme(strip.text.x = element_blank()) +
  labs(x=NULL, y='AMCE') +
  my_theme +
  theme(
    # Remove axis text
    axis.ticks = element_blank(),   
    legend.position = "none"
    
  )  +
  scale_fill_manual(values = c("purple", "#ADD8E6", "#ffc6c4")) +
  scale_color_manual(values = c("purple", "#ADD8E6", "#ffc6c4"))


general_graph <- mm_gen_graph + amce_gen_graph




#### 2. nativism ####

mm_s_nat <- cj(conjoint_choice, cj_2, id = ~ResponseId,  estimate = "mm", by= ~attitudes_immigration_bin, weights = ~ weight) %>% 
  mutate(feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection2"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "muslim"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

amce_s_nat <- cj(conjoint_choice, cj_2, id = ~ResponseId,  estimate = "amce", by= ~attitudes_immigration_bin, weights = ~ weight) %>% 
  mutate(feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection2"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "muslim"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))


mm_nat_graph <- mm_s_nat %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error, 
         BY= attitudes_immigration_bin,
  ) |> 
  filter(!feature %in% c("Age", "Gender", "LGBT", "Proposal:")) |> 
  ggplot(aes(level, fill= BY,color= BY, shape= BY)) +
  geom_hline(data=intercept, aes(yintercept = 0.5), color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~., scales='free', space="free",switch = 'y') +
  coord_flip() +
  theme(legend.title = element_blank()) +
  theme(strip.text = element_blank()) +
  labs(x=NULL, y=NULL) +
  my_theme +
  theme(
    strip.placement = 'outside',
    strip.background = element_rect(color=NA, fill=NA),
    panel.spacing = unit(0,'pt'),
    panel.background = element_rect(color='black'),
    legend.position = "top"
    
  )  +
  labs(x=NULL, y='Marginal means') +
  scale_fill_manual(values = c("#e64072",  "#62aec5")) +
  scale_color_manual(values = c("#e64072", "#62aec5"))


amce_nat_graph <-amce_s_nat %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error, 
         BY= attitudes_immigration_bin,
  ) |> 
  filter(!feature %in% c("Age", "Gender", "LGBT", "Proposal:")) |> 
  ggplot(aes(level, fill= BY,color= BY, shape= BY)) +
  geom_hline(data=intercept, aes(yintercept = 0.0), color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~., scales='free', space="free",switch = 'y') +
  coord_flip() +
  my_theme +
  theme(
    legend.title = element_blank(),
    strip.text.x = element_blank(),
    # Remove axis text
    axis.ticks = element_blank(),       # Remove axis ticks
    # panel.grid.major = element_blank(), # Remove major grid lines
    # panel.grid.minor = element_blank(), # Remove minor grid lines
    legend.position = "none"            # Remove the legend
  ) +
  labs(x=NULL, y='AMCE') +
  scale_fill_manual(values = c("#e64072",  "#62aec5")) +
  scale_color_manual(values = c("#e64072", "#62aec5"))


nativist_graph <- mm_nat_graph + amce_nat_graph

#### 3. national support ####

df_AntiConservative <- conjoint_choice |> filter(proposal_grouped1=="Anti-Conservative")
df_ProConservative <- conjoint_choice |> filter(proposal_grouped1=="Pro-Conservative")
df_AntiProgressive <- conjoint_choice |> filter(proposal_grouped1=="Anti-Progressive")
df_ProProgressive <- conjoint_choice |> filter(proposal_grouped1=="Pro-Progressive")


process_data_frame <- function(daf_name) {
  daf <- get(daf_name)
  direction <- ifelse(grepl("Anti", daf_name), "Anti", "Pro")
  topic <- sub("df_(Anti|Pro)", "", daf_name)
  
  mm_results <- cj(daf, cj_2, id = ~ResponseId, estimate = "mm", by= ~attitudes_immigration_bin, weights = ~weight) %>%
    mutate(feature = case_when(
      feature == "proposal_grouped1" ~ "Proposal:",
      feature == "reasoning_grouped" ~ "Reasoning:",
      feature == "national_support" ~ "National support:",
      feature == "international_rejection2" ~ "Rejected by:",
      feature == "gender" ~ "Gender",
      feature == "age" ~ "Age",
      feature == "ethnicity" ~ "Ethnicity",
      feature == "muslim" ~ "Association",
      TRUE ~ as.character(feature)
    ),
    feature = factor(feature, levels = c("Age", "Gender", "LGBT", "Ethnicity",
                                         "Association", "National support:", "Rejected by:",
                                         "Reasoning:", "Proposal:")),
    type = "Marginal Means",
    direction = direction,
    topic = topic,
    direction_topic = paste(direction, topic, sep = "-")
    )
  
  amce_results <- cj(daf, cj_2, id = ~ResponseId, estimate = "amce", by= ~attitudes_immigration_bin, weights = ~weight) %>%
    mutate(feature = case_when(
      feature == "proposal_grouped1" ~ "Proposal:",
      feature == "reasoning_grouped" ~ "Reasoning:",
      feature == "national_support" ~ "National support:",
      feature == "international_rejection2" ~ "Rejected by:",
      feature == "gender" ~ "Gender",
      feature == "age" ~ "Age",
      feature == "ethnicity" ~ "Ethnicity",
      feature == "muslim" ~ "Association",
      TRUE ~ as.character(feature)
    ),
    feature = factor(feature, levels = c("Age", "Gender", "LGBT", "Ethnicity",
                                         "Association", "National support:", "Rejected by:",
                                         "Reasoning:", "Proposal:")),
    type = "AMCE",
    direction = direction,
    topic = topic,
    direction_topic = paste(direction, topic, sep = "-")
    )
  
  results <- full_join(mm_results, amce_results)
  return(results)
}

# List of data frame names from your environment
daf_names <- ls(pattern = "^df_")

# Apply the function to each data frame and combine results
all_results_df <- map_df(daf_names, process_data_frame)


nationalsupport_all_graph <- all_results_df %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error, 
         BY= attitudes_immigration_bin,
  ) |> 
  filter(type =="Marginal Means") |> 
  filter(feature =="National support:") |> 
  ggplot(aes(level, fill= BY,color= BY, shape= BY)) +
  geom_hline(data=intercept, aes(yintercept = 0.5), color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~direction_topic, scales='free', space="free",switch = 'y') +
  theme(legend.title = element_blank()) +
  theme(strip.text = element_blank()) +
  labs(x=NULL, y=NULL) +
  my_theme +
  theme(
    strip.placement = 'outside',
    strip.background = element_rect(color=NA, fill=NA),
    panel.spacing = unit(0,'pt'),
    panel.background = element_rect(color='black'),
    legend.position = "none"
    
  )  +
  labs(x=NULL, y='Marginal means') +
  scale_fill_manual(values = c("#e64072",  "#62aec5")) +
  scale_color_manual(values = c("#e64072", "#62aec5"))

association_all_graph <- all_results_df %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error, 
         BY= attitudes_immigration_bin,
  ) |> 
  filter(type =="Marginal Means") |> 
  filter(feature =="Association") |> 
  ggplot(aes(level, fill= BY,color= BY, shape= BY)) +
  geom_hline(data=intercept, aes(yintercept = 0.5), color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~direction_topic, scales='free', space="free",switch = 'y') +
  theme(legend.title = element_blank()) +
  theme(strip.text = element_blank()) +
  labs(x=NULL, y=NULL) +
  my_theme +
  theme(
    strip.placement = 'outside',
    strip.background = element_rect(color=NA, fill=NA),
    panel.spacing = unit(0,'pt'),
    panel.background = element_rect(color='black'),
    legend.position = "top"
    
  )  +
  labs(x=NULL, y='Marginal means') +
  scale_fill_manual(values = c("#e64072",  "#62aec5")) +
  scale_color_manual(values = c("#e64072", "#62aec5"))

policy_graph <- association_all_graph / nationalsupport_all_graph 

library(gtsummary)
library(tidyverse)
library(kableExtra)
library(flextable)

# Define all formatting functions first
format_mm_results <- function(mm_data) {
  mm_data %>%
    mutate(
      estimate = round(estimate, 3),
      std.error = round(std.error, 3),
      ci = case_when(
        estimate == 0 & (is.na(std.error) | std.error == 0) ~ "Reference category",
        TRUE ~ sprintf("%.3f to %.3f", lower, upper)
      ),
      std.error = case_when(
        estimate == 0 & (is.na(std.error) | std.error == 0) ~ NA_real_,
        TRUE ~ std.error
      )
    ) %>%
    select(feature, level, estimate, std.error, ci) %>%
    rename(
      "Feature" = feature,
      "Level" = level,
      "Estimate" = estimate,
      "Std. Error" = std.error,
      "95% CI" = ci
    )
}

format_amce_results <- function(amce_data) {
  amce_data %>%
    mutate(
      estimate = round(estimate, 3),
      std.error = round(std.error, 3),
      ci = case_when(
        estimate == 0 & (is.na(std.error) | std.error == 0) ~ "Reference category",
        TRUE ~ sprintf("%.3f to %.3f", lower, upper)
      ),
      std.error = case_when(
        estimate == 0 & (is.na(std.error) | std.error == 0) ~ NA_real_,
        TRUE ~ std.error
      )
    ) %>%
    select(feature, level, estimate, std.error, ci) %>%
    rename(
      "Feature" = feature,
      "Level" = level,
      "AMCE" = estimate,
      "Std. Error" = std.error,
      "95% CI" = ci
    )
}

make_table <- function(data) {
  flextable(data) %>%
    theme_vanilla() %>%
    autofit() %>%
    bold(part = "header") %>%
    fontsize(size = 10) %>%
    add_footer_lines("Note: Results show 95% confidence intervals")
}


# Create tables - Whole Sample
mm_table_whole <- mm_gen %>%
  filter(BY == "Whole sample") %>%
  format_mm_results() %>%
  make_table()

mm_table_nl <- mm_gen %>%
  filter(BY == "The Netherlands") %>%
  format_mm_results() %>%
  make_table()

mm_table_de <- mm_gen %>%
  filter(BY == "Germany") %>%
  format_mm_results() %>%
  make_table()

# AMCE tables
amce_table_whole <- amce_gen %>%
  filter(BY == "Whole sample") %>%
  format_amce_results() %>%
  make_table()

amce_table_nl <- amce_gen %>%
  filter(BY == "The Netherlands") %>%
  format_amce_results() %>%
  make_table()

amce_table_de <- amce_gen %>%
  filter(BY == "Germany") %>%
  format_amce_results() %>%
  make_table()

# Nativism tables
mm_table_nonnativ <- mm_s_nat %>%
  filter(BY == "Non-nativist") %>%
  format_mm_results() %>%
  make_table()

mm_table_nativ <- mm_s_nat %>%
  filter(BY == "Nativist") %>%
  format_mm_results() %>%
  make_table()

amce_table_nonnativ <- amce_s_nat %>%
  filter(BY == "Non-nativist") %>%
  format_amce_results() %>%
  make_table()

amce_table_nativ <- amce_s_nat %>%
  filter(BY == "Nativist") %>%
  format_amce_results() %>%
  make_table()

# Function to format tables
make_policy_table <- function(data) {
  flextable(data) %>%
    theme_vanilla() %>%
    autofit() %>%
    bold(part = "header") %>%
    fontsize(size = 10) %>%
    add_footer_lines("Note: Results show 95% confidence intervals")
}

# Format policy results for Association
policy_assoc_results <- all_results_df %>%
  filter(
    type == "Marginal Means",
    feature == "Association"
  ) %>%
  mutate(
    estimate = round(estimate, 3),
    std.error = round(std.error, 3),
    ci = case_when(
      estimate == 0 & (is.na(std.error) | std.error == 0) ~ "Reference category",
      TRUE ~ sprintf("%.3f to %.3f", lower, upper)
    ),
    std.error = case_when(
      estimate == 0 & (is.na(std.error) | std.error == 0) ~ NA_real_,
      TRUE ~ std.error
    )
  ) %>%
  select(direction_topic, level, estimate, std.error, ci, BY) %>%
  rename(
    "Policy Type" = direction_topic,
    "Level" = level,
    "Estimate" = estimate,
    "Std. Error" = std.error,
    "95% CI" = ci,
    "Sample" = BY
  )

# Format policy results for National Support
policy_support_results <- all_results_df %>%
  filter(
    type == "Marginal Means",
    feature == "National support:"
  ) %>%
  mutate(
    estimate = round(estimate, 3),
    std.error = round(std.error, 3),
    ci = case_when(
      estimate == 0 & (is.na(std.error) | std.error == 0) ~ "Reference category",
      TRUE ~ sprintf("%.3f to %.3f", lower, upper)
    ),
    std.error = case_when(
      estimate == 0 & (is.na(std.error) | std.error == 0) ~ NA_real_,
      TRUE ~ std.error
    )
  ) %>%
  select(direction_topic, level, estimate, std.error, ci, BY) %>%
  rename(
    "Policy Type" = direction_topic,
    "Level" = level,
    "Estimate" = estimate,
    "Std. Error" = std.error,
    "95% CI" = ci,
    "Sample" = BY
  )

# Create tables
assoc_table <- make_policy_table(policy_assoc_results)
support_table <- make_policy_table(policy_support_results)

```

We begin by exploring our results among the full sample. While a core component of our expectations around selective (il)liberalism assumes that the strategic out-group orientated nature of selective support for policies is conditioned by nativist predispositions, we also wish to assess the extent to which citizens as a whole engage in this behavior. @fig-1-iv reports the general results via two estimands: the marginal mean (MM) and the average marginal component effect (AMCE). The MM indicates the favourability toward policy proposals with a given attribute value marginalizing across all other simulatenously randomised attributes and their corresponding values.[^5] Note that the reference line for the plot reporting the MM is 0.5 which indicates the mean level of positive selection. Given the forced choice nature of the outcome, MMs indistinguishable from 0.5 indicate those which should be considered as-good-as-random. The AMCE indicates the change in the probability that a profile is evaluated positively based on a change from the baseline category when the proposal is i) from a white proponent, ii) solicited by non-Muslim association, iii) only support by 20% of the nation, iv) opposed by a non-Arab nation, and v) not accompanied by nativist reasoning.[^6]

[^5]: We limit our reporting to our core attribute of interest, those that are linked to ethnicity, but the effect of all simultaneously randomized attributes are reported in Appendix II.

[^6]: Throughout the text, we report the choice-based results, but as a robustness check we also asked respondents to evaluate each of the policy proposals in a 0-10 scale. These results are reported in the Appendix III and show an overall fairly similar pattern.

The first two rows of @fig-1-iv explore the effect of ethnic out-group cues on policy favorability. The findings are mixed depending on whether the cue is descriptive or substantive. Considering all the simultaneously randomized attributes, respondent are *more* inclined, on average, to support proposals advocated for by non-white individuals. The difference, while small at 3.6 percentage-points, is significant. The reverse pattern is observed when out-group status is manipulated via substantive association with different identity groups. Proposals advocated for by bodies associated with Muslims are supported only 45.8% of the time. This support is 5.4 percentage-points lower than the median preferability enjoyed by all other proposing bodies. These effects are striking. In both the Netherlands and Germany, respondents' policy preferences, across a vast array of substantive policy objectives, discriminate significantly and substantively based on associations with Islam.

On first reading, the results of the descriptive ethnicity outcome might be perceived as counter-intuitive given it is contrary to expectations and to evidence from previous conjoint experiments that shows no conclusive effect of ethnicity on people's preferences, at at least in candidate choice scenarios[@vanoosten2024]. Our interpretation of this result is that, in the presence of information related to the *substantive* representation of ethnically-coded groups (Muslims), the potential bias against non-white individuals cancels outs. In essence, while respondents might infer a religious affiliation with Islam in the absence of specific interest-group information, these inferences are depressed in the presence of these multidimensional features. This interpretation is congruent with the effect of substantive cues on candidate preferences [@Sen2017].

```{r }
#| echo: false
#| message: false
#| warning: false
#| label: fig-1-iv
#| fig-cap: Identity markers that affect policy preferences. The darker lines demark 90%, and the lighter ones 95% confidence intervals.
#| fig-width: 10
#| fig-height: 7
#| fig-align: "center"


general_graph

```

What the third row shows, however, is that the identity marker that clearly exerts the greatest influence in choosing a given policy is national support for that policy which we take to be an instrument for the nationalisation of in-group norms [@schultz2007; @prentice2018; @Bicchieri2017]. Despite some variations between the two countries --- with the effect being stronger for respondents in the Netherlands --- it is evident that the higher the perceived support of the national in-group for the policy, the higher the level of individual support. On average, policies that boast the strongest national-level support (80%) are 12.7 percentage-points more likely to be backed by individuals vis-à-vis those which enjoy support from only 20% of the population. Our interpretation of the amenability of support for policies to signals of in-group support is one of tension. A positive interpretation of this finding is that it signals good news regarding tolerance for the democratic majority: "if the majority support it, I do too". A negative interpretation, however, is that strong signals of national in-group preferences may lead to endorsements of illiberal turns. "If the majority support it, I do too" can fast become problematic when the majority's view is one that is detrimental to the welfare of the minority. Indeed, it is for this reason that many liberal activists and civil rights campaigns have been uncomfortable resolving salient issues around minority rights via plebiscites [@Lewis_Referenda]. Such scenarios illustrate the inherent tension between majoritarianism and the potential threat illiberal turns in democracries.

Among our randomised attributes, we also manipulated which out-country opposed the policy. As mentioned in the description of our design, no country was presented more than once to an individual respondent, we categorized countries into two types, depending on whether Islam is the predominant religion.[^7] Perhaps unsurprisingly, policies that are opposed by Muslim-majority countries are, one average, more likely to be supported, consistent with the theoretical expectation of disidentification and the previous evidence showing that individuals often react asymmetrically to the actions of the out-group [@turnbull-dugarte2023]. These effects, while positive, are *not*, however, statistically distinguishable from zero and are, comparatively, small when considered alongside the in-group norm.

[^7]: Recall that countries were not presented more than once to an individual respondent but from a wider population of countries categorized with distinct attribute values. We can, as a result, by confident that the results for this attribute are not a function of country-specific familiarty, likability or variations in country's cultural hegemony.

The efficacy of nativist reasoning exhibits mixed evidence regarding policy support among the full sample of respondents. In the Netherlands, preferences appear to be as-good-as-random regardless of the reasoning applied. In Germany, there is a clear preference for non-nativist reasoning, with proposals framed in strong nativist terms being 3.7 percentage points less likely to receive support than those employing a non-nativist approach. The negative effects of explicit nativist reasonings in Germany may be a reflection of the heightened level of social stigma against the endorsement of such preferences given the stigmatised nature of explicit nativism in the country.

Two notable findings emerge when examining citizens as a whole. First, a clear anti-Muslim prejudice shapes support for policy preferences. This effect is evident when substantive associations with Islam are manipulated through civic actor associations, though it is not observed when ethnicity is manipulated via visual stimuli. Across a range of policies addressing various issues---such as gender, LGBTQ+ rights, and environmental concerns---citizens tend to update their preferences in a manner that contradicts positions advocated by Muslims. Second, consistent with existing literature on the influence of majority opinions [@schultz2007; @prentice2018], signals of nationalized in-group support conditional policy support in substantive ways.

***Does underlying nativism matter?***

A core expectation of our theory is that the effects of out-group signals will be significantly greater among nativists than non-nativists. We turn to test this now. In @fig-2-nativism we report the marginal means for our core attribute values of interest conditioned by whether respondents express pro- or anti-immigration attitudes. This subgroup variation demonstrates some significant differences in the effect of different features. While nativists' and non-nativists' preferences are *equally* influenced by the (non)-white descriptive identity of the policy proponent, the level of national in-group support, and signals of international endorsement; they react to a different degree when it comes to Muslim-based organisations and asymmetrically to reasoning.

Consistent with the overall rejection of proposals advocated by Muslims among respondents as a whole demonstrated in @fig-1-iv, the results of @fig-2-nativism clearly show that both nativists *and* non-nativists reject proposals advocated by organisations associated with Muslims. There is, however, variation in the magnitude of this prejudice. The penalty on such proposals among nativists is equal to 8 percentage-points and this is close to double (51.1% greater) than that exhibited by non-nativists 3.2 percentage-points). When it comes to assessing whether the efficacy of nativist-based reasoning is likely to move citizens, the results from voters on average showed that manipulating reasoning had little effect. This, on average, null effect is a product of asymmetric responses to these signals between the nativist and non-nativist respondents in the sample. Perhaps unsuprisingly, nativists are 4.7 percentage-points more inclined to support policies that are accompanied by a strong nativist reasoning like "To counter backward Islamic intolerance" compared to non-nativist frames. Similar rhetorical devices, however, move non-nativists in the opposite direction with strong nativist reasoning reducing policy support by 6.9 percentage-points.

```{r }
#| echo: false
#| message: false
#| warning: false
#| label: fig-2-nativism
#| fig-cap: Identity markers that affect policy preferences by nativism. The darker lines demark 90%, and the lighter ones 95% confidence intervals.
#| fig-width: 10
#| fig-height: 7
#  fig-align: "center"

nativist_graph

```

Finally, in @fig-3-subgroups we consider if the effects of substantive group markers and in-group national support are conditioned by the type of reform being proposed by the policy entrepreneur. Doing so allows us to to assess if the influence of the core attributes we identify *on average* is also conditioned by whether the proposals advances a a liberal or illiberal position. These policies, as summarized in Table 2 are categorized based on their ideological roots as progressive or conservative, and whether the proposal is positive or negative. As in the case of @fig-2-nativism , the results are further stratified according to respondents' immigration attitudes.

The findings highlight several key observations regarding the impact of ethnic identity cues on policy preferences. Notably, there is a significant distinction between the effects of substantive group markers and national support. National support appears to draw both anti- and pro-immigration respondents toward endorsing various policies, while the influence of substantive Muslim cues is primarily observed among anti-immigration respondents. This effect is especially pronounced for progressive education programs, where nativist respondents exhibit a marked decrease in support when the promoter is affiliated with a Muslim association. This suggests that nativists perceive issues related to gender, sexuality, and climate change as primarily belonging to their ethnic in-group, viewing them as domains not to be addressed by out-groups. It may also indicate a tendency among nativists to disidentify with out-groups on these specific issues, though this pattern might not extend to other contexts.

```{r }
#| echo: false
#| message: false
#| warning: false
#| label: fig-3-subgroups
#| fig-cap: Identity markers that affect policy preferences by nativism and type of policy proposal. The darker lines demark 90%, and the lighter ones 95% confidence intervals.
#| fig-width: 10
#| fig-height: 7
#| fig-align: "center"

policy_graph

```

These result are of note. They demonstrate that while some identity markers only depress support among nativist respondents, especially for progressive policies, others can make practically any policy -- be that progressive or conservative -- more attractive to respondents across the board. This is the case, for example, of in-group ethnic endorsements. When respondents are informed that a majority of the population is in favor of any type of policy, a majority of both nativists and non-nativists adopt a more favorable view of that policy. The exception remains those policies that are pro-conservative in which case those will more liberal views on migration (the non-nativists) are still more inclined to oppose than endorse the policy.

# Discussion

Identities and tribal thinking play a central role in shaping political attitudes, especially amid the rise of illiberal movements. Historically, Western powers framed cultural and racial hierarchies to justify exclusion, portraying themselves as modern and superior [@said1977; @go2017; @seamster2018]. Today, these narratives have evolved to target immigration and marginalize ethnic minorities within Western societies [@akkerman2005; @akkerman2015; @meret2013; @delange2015]. Nativist actors have weaponized liberal values---such as women's rights, LGBTQ+ freedoms, and environmental concerns---framing them as inherently Western and incompatible with immigrant cultures [@farris2012; @lægaard2007; @spierings2021; @camargo-fernández2024; @turnbull-dugarte2024]. This allows exclusionary policies to be cloaked in a superficial commitment to liberalism, raising concerns about the fragility of democratic norms [@möser2022; @deckman2023; @cornejo-valle2022; @velasco2023]. In our paper we aim to expand our understanding of how citizens respond to these shifting identity-based cues.

We demonstrate that while descriptive identity markers, group reasonings, and out-group norms exert influence on respondents' policy positions, it is substantive identities and in-group norms that primarily determine the stances on both progressive and conservative proposals. Furthermore, we observe that although more nativist respondents are not any more influenced by in-group norms than their less nativist counterparts, they exhibit a pronounced sensitivity to nativist frames and associations with ethnic out-groups. Delving deeper into various policy proposals, we find that nativist respondents are, on average, the most susceptible to transitioning from opposing to supporting a policy based on multidimensional identity markers.

The implications of these heterogenous effect, or lack therefore, are twofold. First, and consistent with evidence presented by @turnbull-dugarte2023 from Spain, the anti-Muslim rejection of proposals among citizens is not limited to the usual (nativist) suspects, even if it is greater for this group. The implications for policy proponents is somewhat depressing: regardless of the issue, campaigns that are explicitly identified with groups associated with Islam are likely to suffer a sizeable penalty in public support, even among those pre-disposed towards culturally liberal values. Secondly, and somewhat more positively, is that heterogeneous responsiveness of nativist reasoning signals that the reach of the far-right actors that leverage this rhetoric may well be constrained. While for those positively predisposed to nativism this rhetoric works, for others such rhetoric is likely to push them away.

Our findings contribute new evidence to the discourse on the fragility of liberal democratic attitudes, suggesting that not only do strong substantive identities, such as partisanship, influence citizens' liberal democratic attitudes, but descriptive markers, perceptions of group norms, and group reasoning can also sway citizens toward more (il)liberal opinions [@graham2020; @simonovits2022; @PowerBOOK].

This is particularly alarming in an era of issue entrepreneurship and political diversification. Homonationalists [@siegel2017; @dudink2017; @Kwon2023], femonationalists [@farris2012; @camargo-fernández2024], and environmental nationalists [@conversi2021; @backlund2022] incorporate progressive elements to position them as incompatible with immigrants. However, nativist leaders are not the only ones utilizing minority group rights reasoning to legitimize their agendas. Besides traditional anti-LGBTQ+ groups, which campaign on morality and religious justifications, the last decade has seen a proliferation of anti-transgender discourses. These discourses often frame transgender rights as conflicting with women's rights and the rights of LGB individuals, gaining traction in the discourse of both radical and mainstream parties in the UK and Spain [@turnbull-dugarte].

This dynamic not only has the potential to deepen the fragmentation of sociocultural attitudes from attitudes towards immigration, creating a growing group of "sexually modern nativists" [@spierings2017; @lancaster2019; @lancaster2022], but it could also presage new dynamics of issue rebundling and a trend towards creating new attitudinal identity subgroups. Such shifts have the potential to erode solidarity among minority groups and to degrade the well-established GAL-TAN opinion structure [@hooghe2002; @devries2018].

Our results show confirmatory evidence that illiberal entrepreneurs and parties exploiting group identity markers to legitimize and broaden the appeal of their agenda may be successful in their objectives. Previous research has indicated that gender attributes can render illiberal policies more palatable [@ben-shitrit2022; @elad-strenger2024; @weeks2022]. We extend these findings to include other descriptive traits, such as ethnicity and LGBTQ+ status, as well as substantive identities like being feminist, ecologist, or a member of a religious organization. While liberal actors could also strategically leverage group identities to enhance their messaging, evidence suggests this approach can backfire. For instance, highlighting conservative group identities, like being a veteran, reduced homophobic bias against openly gay 2020 Democratic primary candidate Pete Buttigieg [@magni2024]. However, this strategic employment of group identities could also lead to strategic discrimination --- namely, the avoidance of selecting minority candidates due to the perception that white male candidates might have broader appeal [@bateson2020].

Our study also furthers the understanding of the role of group norms and reasoning in shaping policy preferencdes. Firstly, we demonstrate that simple manipulations of in-group norms can significantly sway citizens' support towards both liberal and illiberal policies. This aligns with previous social psychological research, which has shown that communications emphasizing widespread engagement in a behavior can promote strong conformity in attitudes and behaviors [@stollberg2017; @levitan2016]. This explains why illiberal entrepreneurs focus on redefining the meanings and norms of social and political in-groups. Secondly, we introduce and operationalize the concept of group reasoning, arguing that policy proposals are often framed not in terms of the direct beneficiaries, but with reasoning that significantly affects how respondents perceive these policies (il)liberally.

# References

::: {#refs}
:::

# Appendix A: data collection and extended results {.appendix}

## Data collection

**Ethical approval for the original data collection and experimental research design was approved the Faculty of Social Sciences Ethics Review Committee at the University of \[BLINDED\].**

The original survey was designed by the authors via Qualtrics. Survey respondents for the survey were sourced from Kieskompas, an online panel vendor that provided quota-based samples designed to reflect population parameters. The target sample for each country was as follows: Netherlands (1,200), and Germany (1,400).

Fieldwork took place during the following dates:

\- Netherlands -- August 5th - 23rd August, 2022 (N=1,169)

\- Germany -- April 20th - May 3rd, 2023 (N=1,358)

The survey demographics look as follows:

```{r }
#| echo: false
#| message: false
#| warning: false
#| label: fig-demographicsDE
#| fig-cap: Survey demographics
#| fig-width: 10
#| fig-height: 5
#| fig-align: "center"

survey::svydesign(~1, data = nlde_data,weights = ~weight) %>%
  tbl_svysummary(by=country, percent = "column", include = c(Gender, Education,
                                              Sexuality,
                                              Leftright, Age)) 


```

## Conjoint elements

***Descriptive identity markers: age, gender, and ethnicity***

The first three categories - age, gender and ethnicity - are represented visually, through AI-generated images of faces. The source of these photos is Generated.Photos, which shares its creations altruistically for research purposes. Based on their pre-categorizations, we selected 5 images for each combination of  characteristics. The rationale behind this choice is that respondents cannot be exposed to the same image more than once. By having five images for each combination of characteristics we ensure that respondents can face the same combination of categories with different (but interchangeable) images. Once a face is shown in the experiment, that face cannot reappear (but the remaining four faces of its interchangeable category can). We made sure the images were interchangeable by restricting ourselves to the Generated.Photos criteria for ethnicity, gender, and age; while keeping it consistent to have unsmiling, front-facing faces.

***Substantive identity markers***

In a similar way to the faces, with the group names, we wanted to avoid respondents being confronted with the same name more than once. The reason is to try to maximize the credibility and external validity of the experiment. Thus, we selected for each category within 'group name' five items similar in concept but with different wording. The way the experiment is programmed, the moment a certain 'group name' appears, this name cannot appear again. In the following table, you can see all the values that 'group name' can take in each of its five categories.

| Category | Group Name 1 | Group Name 2 | Group Name 3 | Group Name 4 | Group Name 5 |
|:-----------|:-----------|:-----------|:-----------|:-----------|:-----------|
| Ecologist | Recycle Now! 🌎♻️ | Green Planet Alliance 🌎♻️ | Friends of the Planet 🌎♻️ | Green World Initiative 🌎♻️ | Network for Environmental Protection 🌎♻️ |
| Queer | Love is Love 🏳️‍🌈 | LGBTQ+ Equality Network 🏳️‍🌈 | Dutch LGBTQ+ Alliance 🏳️‍🌈 | Rainbow Sexuality Group 🏳️‍🌈 | LGBTQ+ Rights Movement 🏳️‍🌈 |
| Feminist | Women First ♀️ | Women's Equality Network ♀️ | Dutch Alliance for Women's Rights ♀️ | Platform for Women's |  |

***group reasonings***

As with the proposals, this variable takes the form of a classical conjoint category, in this case with six values.

| Hard nativist |   | Soft nativist |   | Non nativist |   |
|:-----------|:-----------|:-----------|:-----------|:-----------|:-----------|
| To make sure incoming migrants learn Dutch values | To counter backward Islamic intolerance | Because it is part of our Dutch identity | To protect our domestic freedoms and western lifestyle | Because social justice is needed | To make a better world |

***Group norms markers: national support***

Again, this variable takes the form of a classical conjoint category, in this case with six values:

-   20% of Dutch/German society

-   40% of Dutch/German society

-   60% of Dutch/German society

-   80% of Dutch/German society

***Group norms markers: international support***

Finally, the international support variable adopts the same logic as the 'face' (age, gender, ethnicity) and 'group name' variables whereby each value can only appear once (not its specific category). The categories and values adopted by this variable are detailed below.

| Category | Country Name 1 | Country Name 2 | Country Name 3 | Country Name 4 | Country Name 5 |
|:-----------|:-----------|:-----------|:-----------|:-----------|:-----------|
| Islamic | Morocco | Iran | Egypt | Saudi Arabia | Libya |
| western | Norway | Denmark | Switzerland | Belgium | Ireland |
| Eastern | Poland | Hungary | Serbia | Romania | Czech Republic |
| Southern | Portugal | Spain | Greece | Italy | Malta |

## Choice-based conjoints' AMCE and MM full analyses

```{r }
#| echo: false
#| message: false
#| warning: false
#| label: fig-app1-dv
#| fig-cap: Policy preferences. The darker lines demark 90%, and the lighter ones 95% confidence intervals.
#| fig-width: 10
#| fig-height: 5
#| fig-align: "center"



mm_gen2 %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error
  ) |> 
  filter(feature== "Proposal:") |> 
ggplot(aes(level, fill= BY, color=BY, shape=BY))  +
  geom_hline(yintercept = 0.5, color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~., scales='free', space='free', switch = 'y') +
  coord_flip() +
  theme(legend.title = element_blank()) +
  theme(strip.text = element_blank()) +
  labs(x=NULL, y='Marginal means') +
  theme_classic() +
  theme(
    strip.placement = 'outside',
    strip.background = element_rect(color=NA, fill=NA),
    panel.spacing = unit(0,'pt'),
    panel.background = element_rect(color='black'),
    legend.position = "bottom"
    
  )   +
  scale_fill_manual(values = c("purple", "#ADD8E6", "#ffc6c4")) +
  scale_color_manual(values = c("purple", "#ADD8E6", "#ffc6c4"))
```

## Preference-based conjoints' AMCE and MM full analyses

```{r, echo=FALSE, fig.height=6, fig.width=7, echo= FALSE, message=FALSE, warning=FALSE}

#### 0. pre-processing ####

load("data/conjoint_choice.Rdata")
load("data/conjoint_rating.Rdata")

load("de_data.Rdata")
load("nl_data.Rdata")
library(tidyverse)
library(cregg)
library(PrettyCols)
library(extrafont)
library(patchwork)
library(FindIt)
library(ggdist)
library(gtsummary)
library(tidycomm)
library(kableExtra)
library(flextable)

intercept <- tibble(
  type = factor(c("Marginal means", "Differences in marginal means")),
  value = c(0.5, 0)
) 

loadfonts()

my_theme <- theme_minimal(base_size = 12) +
  theme(
    strip.placement = 'outside',
    strip.background = element_rect(color=NA, fill=NA),
    panel.spacing = unit(0,'pt'),
    panel.background = element_rect(color='black')
  )

nl_data1 <- nl_data |> drop_na(weight) |> 
  mutate(Gender= case_when(respondent_gender==1 ~ "Man",
                           respondent_gender==2 ~ "Woman"
  ),
  Education= case_when(respondent_edu== 1 ~ "Primary studies",
                       respondent_edu== 2 ~ "Secondary studies",
                       respondent_edu== 3 ~ "Tertiary studies"
  ),
  Leftright= respondent_leri, Sexuality=respondent_sexuality,
  Birthyear= respondent_age, country="Netherlands") |> 
  select(Gender, Sexuality, Education, Leftright, Birthyear, weight, country)

de_data1 <- de_data |> drop_na(weight) |> 
  mutate(Gender= case_when(respondent_gender==1 ~ "Man",
                           respondent_gender==2 ~ "Woman"
  ),
  Education= case_when(respondent_edu== 1 ~ "Primary studies",
                       respondent_edu== 2 ~ "Secondary studies",
                       respondent_edu== 3 ~ "Tertiary studies"
  ),
  Leftright= respondent_leri, Sexuality=respondent_sexuality,
  Birthyear= respondent_age, country="Germany") |> 
  select(Gender, Sexuality, Education, Leftright, Birthyear, weight, country)

nlde_data <- full_join(nl_data1, de_data1) |> 
  mutate(Age= cut_number(2022 - Birthyear, 4))

cj_1 <- rating ~  age + gender + LGBT + ethnicity + proposal_grouped1 + reasoning_grouped + group + national_support + international_rejection 

cj_2 <- rating ~  age + gender + LGBT + ethnicity +reasoning_grouped + muslim + national_support + international_rejection2  

mm_c2 <- cj(conjoint_rating, cj_1, id = ~ResponseId,  estimate = "mm", weights = ~ weight) %>% 
  mutate(BY= "Whole sample",
         feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "group"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

mm_s2 <- cj(conjoint_rating, cj_1, id = ~ResponseId,  estimate = "mm", by= ~country, weights = ~ weight) %>% 
  mutate(feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "group"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

mm_gen2 <- full_join(mm_c2, mm_s2) |> mutate(BY= factor(BY, levels= c("Whole sample", "The Netherlands", "Germany"))) 



#### 1. general ####

mm_c_rating <- cj(conjoint_rating, cj_2, id = ~ResponseId,  estimate = "mm", weights = ~ weight) %>% 
  mutate(BY= "Whole sample",
         feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection2"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "muslim"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

mm_s_rating <- cj(conjoint_rating, cj_2, id = ~ResponseId,  estimate = "mm", by= ~country, weights = ~ weight) %>% 
  mutate(feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection2"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "muslim"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

mm_gen_rating <- full_join(mm_c_rating, mm_s_rating) |> mutate(BY= factor(BY, levels= c("Whole sample", "The Netherlands", "Germany")))


mm_gen_graph_rating <- mm_gen_rating %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error
  ) |> 
  filter(!feature %in% c("Age", "Gender", "LGBT", "Proposal:")) |> 
  ggplot(aes(level, fill= BY, color=BY, shape=BY)) +
  #geom_hline(yintercept = 0.5, color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~., scales='free', space='free', switch = 'y') +
  coord_flip() +
  theme(legend.title = element_blank()) +
  theme(strip.text = element_blank()) +
  labs(x=NULL, y='Marginal means') +
  my_theme +
  theme(
    strip.placement = 'outside',
    strip.background = element_rect(color=NA, fill=NA),
    panel.spacing = unit(0,'pt'),
    panel.background = element_rect(color='black'),
    legend.position = "top"
    
  )  +
  scale_fill_manual(values = c("purple", "#ADD8E6", "#ffc6c4")) +
  scale_color_manual(values = c("purple", "#ADD8E6", "#ffc6c4")) 




amce_c_rating <- cj(conjoint_rating, cj_2, id = ~ResponseId,  estimate = "amce", weights = ~ weight) %>% 
  mutate(BY= "Whole sample",
         feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection2"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "muslim"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

amce_s_rating <- cj(conjoint_rating, cj_2, id = ~ResponseId,  estimate = "amce", by= ~country, weights = ~ weight) %>% 
  mutate(feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection2"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "muslim"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

amce_gen_rating <- full_join(amce_c_rating, amce_s_rating) |> mutate(BY= factor(BY, levels= c("Whole sample", "The Netherlands", "Germany")))


amce_gen_graph_rating <- amce_gen_rating %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error
  ) |> 
  filter(!feature %in% c("Age", "Gender", "LGBT", "Proposal:")) |> 
  ggplot(aes(level, fill= BY, color=BY, shape=BY)) +
  geom_hline(yintercept = 0.0, color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~., scales='free', space='free', switch = 'y') +
  coord_flip() +
  
  theme(legend.title = element_blank()) +
  theme(strip.text.x = element_blank()) +
  labs(x=NULL, y='AMCE') +
  my_theme +
  theme(
             # Remove axis text
    axis.ticks = element_blank(),   
    legend.position = "none"
    
  )  +
  scale_fill_manual(values = c("purple", "#ADD8E6", "#ffc6c4")) +
  scale_color_manual(values = c("purple", "#ADD8E6", "#ffc6c4"))


general_graph_rating <- mm_gen_graph_rating + amce_gen_graph_rating




#### 2. nativism ####

mm_s_nat_rating <- cj(conjoint_rating, cj_2, id = ~ResponseId,  estimate = "mm", by= ~attitudes_immigration_bin, weights = ~ weight) %>% 
  mutate(feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection2"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "muslim"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))

amce_s_nat_rating <- cj(conjoint_rating, cj_2, id = ~ResponseId,  estimate = "amce", by= ~attitudes_immigration_bin, weights = ~ weight) %>% 
  mutate(feature= case_when(feature== "proposal_grouped1"~"Proposal:",
                            feature== "reasoning_grouped"~"Reasoning:",
                            feature== "national_support"~"National support:",
                            feature== "international_rejection2"~"Rejected by:",
                            feature== "gender"~"Gender",
                            feature== "age"~"Age",
                            feature== "ethnicity"~"Ethnicity",
                            feature== "muslim"~"Association",
                            TRUE ~as.character(feature))) %>% 
  mutate(feature= factor(feature, levels=c("Age", "Gender", "LGBT", "Ethnicity",
                                           "Association", "National support:", "Rejected by:",
                                           "Reasoning:", "Proposal:")))


mm_nat_graph_rating <- mm_s_nat_rating %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error, 
         BY= attitudes_immigration_bin,
  ) |> 
  filter(!feature %in% c("Age", "Gender", "LGBT", "Proposal:")) |> 
  ggplot(aes(level, fill= BY,color= BY, shape= BY)) +
  #geom_hline(data=intercept, aes(yintercept = 0.5), color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~., scales='free', space="free",switch = 'y') +
  coord_flip() +
  theme(legend.title = element_blank()) +
  theme(strip.text = element_blank()) +
  labs(x=NULL, y=NULL) +
  my_theme +
  theme(
    strip.placement = 'outside',
    strip.background = element_rect(color=NA, fill=NA),
    panel.spacing = unit(0,'pt'),
    panel.background = element_rect(color='black'),
    legend.position = "top"
    
  )  +
  labs(x=NULL, y='Marginal means') +
  scale_fill_manual(values = c("#e64072",  "#62aec5")) +
  scale_color_manual(values = c("#e64072", "#62aec5"))


amce_nat_graph_rating <-amce_s_nat_rating %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error, 
         BY= attitudes_immigration_bin,
  ) |> 
  filter(!feature %in% c("Age", "Gender", "LGBT", "Proposal:")) |> 
  ggplot(aes(level, fill= BY,color= BY, shape= BY)) +
  geom_hline(data=intercept, aes(yintercept = 0.0), color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~., scales='free', space="free",switch = 'y') +
  coord_flip() +
  my_theme +
  theme(
    legend.title = element_blank(),
    strip.text.x = element_blank(),
             # Remove axis text
    axis.ticks = element_blank(),       # Remove axis ticks
    # panel.grid.major = element_blank(), # Remove major grid lines
    # panel.grid.minor = element_blank(), # Remove minor grid lines
    legend.position = "none"            # Remove the legend
  ) +
  labs(x=NULL, y='AMCE') +
  scale_fill_manual(values = c("#e64072",  "#62aec5")) +
  scale_color_manual(values = c("#e64072", "#62aec5"))


nativist_graph_rating <- mm_nat_graph_rating + amce_nat_graph_rating

#### 3. national support ####

df_AntiConservative_rating <- conjoint_rating |> filter(proposal_grouped1=="Anti-Conservative")
df_ProConservative_rating <- conjoint_rating |> filter(proposal_grouped1=="Pro-Conservative")
df_AntiProgressive_rating <- conjoint_rating |> filter(proposal_grouped1=="Anti-Progressive")
df_ProProgressive_rating <- conjoint_rating |> filter(proposal_grouped1=="Pro-Progressive")

rm(df_names, df_AntiConservative, df_ProConservative, df_AntiProgressive, df_ProProgressive)
# List of data frame names from your environment
daf_names <- ls(pattern = "^df_")

# Apply the function to each data frame and combine results
all_results_df_rating <- map_df(daf_names, process_data_frame)


nationalsupport_all_graph_rating <- all_results_df_rating %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error, 
         BY= attitudes_immigration_bin,
  ) |> 
  filter(type =="Marginal Means") |> 
  filter(feature =="National support:") |> 
  ggplot(aes(level, fill= BY,color= BY, shape= BY)) +
  #geom_hline(data=intercept, aes(yintercept = 0.5), color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~direction_topic, scales='free', space="free",switch = 'y') +
  theme(legend.title = element_blank()) +
  theme(strip.text = element_blank()) +
  labs(x=NULL, y=NULL) +
  my_theme +
  theme(
    strip.placement = 'outside',
    strip.background = element_rect(color=NA, fill=NA),
    panel.spacing = unit(0,'pt'),
    panel.background = element_rect(color='black'),
    legend.position = "none"
    
  )  +
  labs(x=NULL, y='Marginal means') +
  scale_fill_manual(values = c("#e64072",  "#62aec5")) +
  scale_color_manual(values = c("#e64072", "#62aec5"))

association_all_graph_rating <- all_results_df_rating %>% 
  mutate(upper90= estimate + 1.645*std.error,
         lower90= estimate - 1.645*std.error, 
         BY= attitudes_immigration_bin,
  ) |> 
  filter(type =="Marginal Means") |> 
  filter(feature =="Association") |> 
  ggplot(aes(level, fill= BY,color= BY, shape= BY)) +
  #geom_hline(data=intercept, aes(yintercept = 0.5), color="grey10", linetype="dashed" ) +
  geom_linerange(aes(ymin= lower, ymax = upper),
                 width=0.2, size=2, alpha=0.5, position=position_dodge(width = 0.9)) +
  geom_linerange(aes(ymin= lower90, ymax = upper90),
                 width=0.2, size=2, position=position_dodge(width = 0.9)) +
  geom_point(aes(y=estimate), size=2,              
             fill="white", 
             color="black", 
             position=position_dodge(width = 0.9))+
  facet_grid(feature~direction_topic, scales='free', space="free",switch = 'y') +
  theme(legend.title = element_blank()) +
  theme(strip.text = element_blank()) +
  labs(x=NULL, y=NULL) +
  my_theme +
  theme(
    strip.placement = 'outside',
    strip.background = element_rect(color=NA, fill=NA),
    panel.spacing = unit(0,'pt'),
    panel.background = element_rect(color='black'),
    legend.position = "top"
    
  )  +
  labs(x=NULL, y='Marginal means') +
  scale_fill_manual(values = c("#e64072",  "#62aec5")) +
  scale_color_manual(values = c("#e64072", "#62aec5"))

policy_graph_rating <- association_all_graph_rating / nationalsupport_all_graph_rating 

```

```{r }
#| echo: false
#| message: false
#| warning: false
#| label: fig-general_graph_rating
#| fig-cap: General results by country. The darker lines demark 90%, and the lighter ones 95% confidence intervals.
#| fig-width: 10
#| fig-height: 7
#| fig-align: "center"

general_graph_rating

```

```{r }
#| echo: false
#| message: false
#| warning: false
#| label: fig-nativist_graph_rating
#| fig-cap: Results by nativism status. The darker lines demark 90%, and the lighter ones 95% confidence intervals.
#| fig-width: 10
#| fig-height: 7
#| fig-align: "center"

nativist_graph_rating

```

```{r }
#| echo: false
#| message: false
#| warning: false
#| label: fig-policy_graph_rating
#| fig-cap: Results by nativism status and type of policy proposal. The darker lines demark 90%, and the lighter ones 95% confidence intervals.
#| fig-width: 10
#| fig-height: 7
#| fig-align: "center"

policy_graph_rating

```

### Conjoint diagnostics

```{r }
#| echo: false
#| message: false
#| warning: false
#| label: fig-app1-proportions
#| fig-cap: Concurrence of each attribute level
#| fig-width: 10
#| fig-height: 10
#| fig-align: "center"

plot(cj_freqs(conjoint_choice, cj_2, id = ~ResponseId)) +
  theme(legend.title = element_blank()) +
  theme(strip.text = element_blank()) +
  labs(x=NULL, y='Marginal means') +
  theme_classic() +
  theme(
    strip.placement = 'outside',
    strip.background = element_rect(color=NA, fill=NA),
    panel.spacing = unit(0,'pt'),
    panel.background = element_rect(color='black'),
    legend.position = "bottom")  

```

## General conjoint preferences

```{r }
#| echo: false
#| message: false
#| warning: false
#| label: fig-app1-carryover
#| fig-cap: Conjoint results
#| fig-width: 10
#| fig-height: 10
#| fig-align: "center"

plot(mm(conjoint_choice, choice ~  age + gender + LGBT+ethnicity +reasoning_grouped + muslim   + national_support + international_rejection2, id = ~ResponseId), vline = 0.5) 

```

```{r }
#| echo: false
#| message: false
#| warning: false
#| label: fig-app1-conjointtest
#| fig-cap: Carryover effects
#| fig-width: 5
#| fig-height: 5
#| fig-align: "center"

conjoint_choice$candidate <- factor(conjoint_choice$candidate)
plot(cj(conjoint_choice, choice ~  age + gender + LGBT+ethnicity +reasoning_grouped + muslim   + national_support + international_rejection2, id = ~ResponseId, by = ~candidate, estimate = "mm"), group = "candidate", vline = 0.5)

```

## Regression tables for article's figures

```{r}
#| label: tbl-mm-whole
#| tbl-cap: "Marginal Means Results - Whole Sample"
mm_table_whole
```

```{r}
#| label: tbl-mm-nl
#| tbl-cap: "Marginal Means Results - Netherlands"
mm_table_nl
```

```{r}
#| label: tbl-mm-de
#| tbl-cap: "Marginal Means Results - Germany"
mm_table_de
```

```{r}
#| label: tbl-amce-whole
#| tbl-cap: "Average Marginal Component Effects - Whole Sample"
amce_table_whole
```

```{r}
#| label: tbl-amce-nl
#| tbl-cap: "Average Marginal Component Effects - Netherlands"
amce_table_nl
```

```{r}
#| label: tbl-amce-de
#| tbl-cap: "Average Marginal Component Effects - Germany"
amce_table_de
```

```{r}
#| label: tbl-mm-nonnativ
#| tbl-cap: "Marginal Means Results - Non-Nativist Sample"
mm_table_nonnativ
```

```{r}
#| label: tbl-mm-nativ
#| tbl-cap: "Marginal Means Results - Nativist Sample"
mm_table_nativ
```

```{r}
#| label: tbl-amce-nonnativ
#| tbl-cap: "AMCEs - Non-Nativist Sample"
amce_table_nonnativ
```

```{r}
#| label: tbl-amce-nativ
#| tbl-cap: "AMCEs - Nativist Sample"
amce_table_nativ
```

```{r}
#| label: tbl-policy-assoc
#| tbl-cap: "Association Effects by Policy Type"
assoc_table
```

```{r}
#| label: tbl-policy-support
#| tbl-cap: "National Support Effects by Policy Type"
support_table
```

## Questionnaire Items (German Version)

### Immigration Attitudes (Einstellungen zur Immigration)

**imm1.** *German:* Glauben Sie, dass es generell schlecht oder gut für die niederländische Wirtschaft ist, dass Menschen aus anderen Ländern hierherkommen, um hier zu leben?\
*English:* Do you think it is generally bad or good for the Dutch economy that people come from other countries to live here? - Schlecht für die Wirtschaft / Bad for the economy (0) - 1-9 \[Scale points\] - Gut für die Wirtschaft / Good for the economy (10) - Weiß nicht / Don't know (9999)

**imm2.** *German:* Glauben Sie, dass das kulturelle Leben in Deutschland im Allgemeinen durch den Zuzug von Menschen aus anderen Ländern geschwächt oder bereichert wurde?\
*English:* Would you say that Germany's cultural life is generally undermined or enriched by people coming to live here from other countries? - Das kulturelle Leben wurde untergraben / Cultural life is undermined (0) - 1-9 \[Scale points\] - Das kulturelle Leben wurde bereichert / Cultural life is enriched (10) - Weiß nicht / Don't know (9999)

**imm3.** *German:* Ist Deutschland ein schlechterer oder besserer Ort zum Leben geworden, weil Menschen aus anderen Ländern hierher gezogen sind?\
*English:* Has Germany become a worse or better place to live because people have come to live here from other countries? - Das kulturelle Leben wurde untergraben / Place has become worse (0) - 1-9 \[Scale points\] - Das kulturelle Leben wurde bereichert / Place has become better (10) - Weiß nicht / Don't know (9999)

### Conjoint Experiment (Conjoint-Experiment)

#### Introduction (Einführung)

*German:* Kommen wir nun zum wichtigsten Teil der Umfrage. Hier würden wir gerne wissen, welche Reform des Bildungsprogramms Sie unterstützen würden. Wir zeigen Ihnen verschiedene Kombinationen möglicher Lehrplanreformen für die Bildung. Die folgenden Vorschläge enthalten Informationen über die Befürworter des Vorschlags, ihre Argumentation, den Grad der nationalen und internationalen Unterstützung und den Vorschlag selbst. Lesen Sie die Vorschläge sorgfältig durch.

*English:* Now we come to the most important part of the survey. Here we would like to know which education program reform you would support. We will show you different combinations of possible curriculum reforms for education. The following proposals contain information about the supporters of the proposal, their reasoning, the degree of national and international support, and the proposal itself. Please read the proposals carefully.

#### For Each Round (1-5) / Für jede Runde (1-5)

For each pair of proposals (A and B), respondents were asked:

1.  **Choice Question (Auswahlsfrage):**\
    *German:* Welchen der beiden Vorschläge bevorzugen Sie?\
    *English:* Which of the two proposals do you prefer?
    -   Vorschlag A / Proposal A
    -   Vorschlag B / Proposal B
2.  **Rating Questions (Bewertungsfragen):**\
    *German:* Inwieweit sind Sie gegen oder für Vorschlag A/B?\
    *English:* To what extent are you against or in favor of Proposal A/B?
    -   Entschieden dagegen / Strongly against (0)
    -   1-9 \[Scale points\]
    -   Entschieden dafür / Strongly in favor (10)

*Note: This experiment was repeated five times with different combinations of proposals.*

# Appendix B: Deviations from pre-analysis plan

Our implemented study followed the [pre-registered design](https://osf.io/9uwqx/?view_only=9b29b99449864fe7a7a9d40784fd0203) closely, but some modifications were made to improve theoretical clarity and analytical rigor. We document these deviations below:

## Theoretical focus and variable operationalization

1.  While the pre-analysis plan encompassed analyses of different policy domains (LGBT+, feminist, environmental, and transinclusive education) and their interaction with progressive/conservative attitudes alongside our main focus on nativism, we streamlined our analysis to focus exclusively on how nativist attitudes condition support for liberal policies. This refinement allowed us to concentrate on our core theoretical interest in how ethnic-based group identities drive selective liberalism, which aligns directly with theories of homonationalism, femonationalism, and environmental nationalism. These theoretical frameworks specifically posit that support for liberal policies is shaped by ethnic group dynamics, making nativism the most relevant moderator for understanding these phenomena.

2.  Following this theoretical refinement, we modified how we grouped and analyzed variables:

    -   Association and ethnicity variables were categorized based on whether they represented ethnic in-group or out-group markers, rather than analyzing them separately
    -   The heterogeneous effects analysis focused primarily on nativism as the key moderator, rather than examining multiple ideological dimensions

However, to maintain transparency and connection to the pre-registered design, we include analyses of how effects vary by type of education policy in Appendix Figure A2.

## Analysis approach

While the pre-analysis plan specified analyzing both binary choice and 11-point rating outcomes, we focused primarily on choice outcomes in the main text, with rating analyses reported in the supplementary materials for transparency.

None of these deviations were contingent on observed results, and all major analytical decisions were made prior to examining the outcome data. These modifications were made to strengthen the theoretical contribution and analytical clarity of the study while maintaining fidelity to the core pre-registered design.
